#define _CRT_SECURE_NO_WARNINGS 1

#ifdef WIN32
  // This is the "GL extension wrangler"
  // Note: you will need to use the right version of glew32s.lib (32 bit vs 64 bit)
  #define GLEW_STATIC
  #include "GL/glew.h"

  // This is the "GL utilities" framework for drawing with OpenGL
  #define FREEGLUT_STATIC
  #define FREEGLUT_LIB_PRAGMAS 0
  #include "GL/glut.h"
  #include "AL/al.h"
  #include "AL/alc.h"
#else
  #include "GLUT/glut.h"
  #include "GL/glew.h"
  #include "AL/al.h"
  #include "AL/alc.h"
#endif

#include <stdio.h>
#include <math.h>
#include <assert.h>
#include <time.h>

#include <vector.h>
#include <matrix.h>

#include <shader.h>
#include <texture.h>
#include <file_manager.h>
#include <sound_manager.h>

#include "Physics.h"


// including game objects
#include "Textures.h"

#include "Sprite.h"
#include "Button.h"
#include "Input.h"
#include "MotherOfAll.h"
#include "Balloon.h"
#include "Cloud.h"
#include "Star.h"
#include "Impulse.h"

#include "Game.h"

// boilerplate to run the sample
int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);
  glutInitWindowSize(FRAME_WIDTH, FRAME_HEIGHT); // HSVG - portrait
  glutCreateWindow("Upward Bound");
  glewInit();
  if (!glewIsSupported("GL_VERSION_2_0") )
  {
    printf("OpenGL 2 is required!\n");
    return 1;
  }
  glutDisplayFunc(Game::display);
  glutReshapeFunc(Game::reshape);
  glutMouseFunc(Game::mouse);
  glutMotionFunc(Game::motion);
  glutTimerFunc(30, Game::timer, 1);
  glutMainLoop();
  return 0;
}

